package com.dsteiner.widgets.client.controller;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;

import com.dsteiner.widgets.client.Widgets.HTMLExt;
import com.dsteiner.widgets.client.Widgets.IHTML;
import com.dsteiner.widgets.client.Widgets.ILazyWidget;
import com.dsteiner.widgets.client.Widgets.IWidget;
import com.dsteiner.widgets.client.Widgets.WidgetListenerAdapter;
import com.dsteiner.widgets.client.model.RateItModel;
import com.dsteiner.widgets.client.model.StarModel;

public class RateItController {

	private ILazyWidget rateItWidget;
	private RateItModel rateItModel;
	private IHTML messageHtml;

	public void registerMessageHtml(IHTML messageHtml) {
		this.messageHtml = messageHtml;
	}

	public void registerRateItModel(RateItModel rateItModel) {
		this.rateItModel = rateItModel;
		rateItModel.addPropertyChangeListener("message", new PropertyChangeListener(){
			public void propertyChange(PropertyChangeEvent evt) {
				updateMessage();
			}
		});
	}
	
	public void registerRateItWidget(ILazyWidget rateItWidget) {
		this.rateItWidget = rateItWidget;
		rateItWidget.addWidgetListener(new WidgetListenerAdapter(){
			@Override
			public void onAttach(IWidget widget) {
				updateMessage();
			}
		});
	}

	public void registerStarModel(final StarModel starModel) {
		starModel.addPropertyChangeListener(new PropertyChangeListener(){
			public void propertyChange(PropertyChangeEvent evt) {
				if("rated".equals(evt.getPropertyName())){
	            	Integer rating = rateItModel.getRating();
	            	int rate = starModel.getRate();
                    rateItModel.setRating(rate);
				}
			}
		});
	}

	private void updateMessage() {
		String message = rateItModel.getMessage();
		messageHtml.setVisible(message != null);
		messageHtml.setHTML(message);
	}
}
